package org.example.BIO_03;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 引入多线程，处理多个客户端请求
 * 多线程处理多个客户端发来的请求，每个线程仍然是阻塞的
 * 接收到每一个请求时都新创建一个线程池，用来处理对应请求
 *
 * 小结：
 * 1.每个Socket接收到，都会创建一个线程，线程竞争，切换上下文影响性能
 * 2.每个线程都占用栈空间和cpu资源
 * 3.空闲的socket线程占用资源
 * 4.并发增加时，线程开销大，访问量大，系统发生栈溢出
 */
public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(9999);
        System.out.println("服务端启动，端口：9999");
        while (true) {
            Socket accept = ss.accept();
            new SocketHandler(accept).start();
        }
    }
}
